#ifndef __SCENEGENERATOR_H__
#define __SCENEGENERATOR_H__

#include "../include/ISceneGenerator.h"
#include "../include/IDrawableFace.h"

class CSceneGenerator : public ISceneGenerator
{
protected:
	ISceneNode *Default3DParent;
	ISceneNode *Default2DParent;
public:
	CSceneGenerator();
	virtual ~CSceneGenerator();

	virtual void SetDefaultScene3DParent(ISceneNode *newdp);
	virtual void SetDefaultScene2DParent(ISceneNode *newdp);
	virtual ISceneNode *GetNewEmptySceneNode(ISceneNodeBasicParamsDeclaration);
	virtual I2DCameraSceneNode *GetNew2DCameraSceneNode(ISceneNodeBasicParamsDeclaration);
	virtual I3DCameraSceneNode *GetNew3DCameraSceneNode(vPos angle=90.0,vPos aspect=1.0,
									vector3dvpos lookat=vector3dvpos(0.0,0.0,0.0),vPos znear=0.0,vPos zfar=100.0,
									vector3dvpos vup=vector3dvpos(0.0,1.0,0.0),ISceneNodeBasicParamsDeclaration);
	virtual ILightSceneNode *GetNewLightSceneNode(IMaterial mat=IMaterial(),vector3df32 nspotd=vector3df32(0.0,0.0,0.0),
									f32 spotco=10.0,ISceneNodeBasicParamsDeclaration);
	virtual IDrawableSceneNode *GetNewCubeSceneNode(vector3dvpos Len=vector3dvpos(1.0,1.0,1.0),
									ISceneNodeBasicParamsDeclaration);
	virtual IDrawableSceneNode *GetNewPoligon3DSceneNode(vector3dvpos Len=vector3dvpos(1.0,1.0,1.0),IPoligon3D *PolBase=NULL,
									std::vector<bool> *HideFace=NULL,ISceneNodeBasicParamsDeclaration);
	virtual IDrawableSceneNode *GetNewSphereSceneNode(vector3dvpos Radius=vector3dvpos((vPos)1.0,(vPos)1.0,(vPos)1.0),
									u32 Partitions=10,ISceneNodeBasicParamsDeclaration);

	virtual I2DSpriteSceneNode *GetNew2DSpriteSceneNode(ITexture *Tex=NULL,ISceneNodeBasicParamsDeclaration);
	virtual ITextSceneNode *GetNewTextNode(IFont *fnt=NULL,stringc Text="",AlignementX ax=ALIGNEMENT_X_LEFT,
									AlignementY ay=ALIGNEMENT_Y_UNDER,vector2dvpos nSpace=vector2dvpos(0.0,0.0),
									vPos nPoints=0.1,ISceneNodeBasicParamsDeclaration);

	IDrawableFace *GetNewQuadFace(IMaterial *Material,vector3dvpos *Vertexs);
};

#endif
